<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      /*
            给定一个整数数组 nums 和一个整数目标值 target，请你在该数组中找出 和为目标值 target  的那 两个 整数，并返回它们的数组下标。

            你可以假设每种输入只会对应一个答案，并且你不能使用两次相同的元素。

            你可以按任意顺序返回答案。

            

            示例 1：

            输入：nums = [2,7,11,15], target = 9
            输出：[0,1]
            解释：因为 nums[0] + nums[1] == 9 ，返回 [0, 1] 。
            示例 2：

            输入：nums = [3,2,4], target = 6
            输出：[1,2]
            示例 3：

            输入：nums = [3,3], target = 6
            输出：[0,1]
*/
      /**
       * @param {number[]} nums
       * @param {number} target
       * @return {number[]}
       */
      function twoSum(nums, target) {
        // 解法一：
        // for (let i = 0; i < nums.length - 1; i++) {
        //   for (let j = i + 1; j < nums.length; j++) {
        //     if (nums[i] + nums[j] === target) {
        //       return [i, j];
        //     }
        //   }
        // }
        // 解法二：
        const map = new Map();
        for (let i = 0; i < nums.length; i++) {
          if (map.has(target - nums[i])) {
            return [map.get(target - nums[i]), i];
          }
          map.set(nums[i], i);
        }
      }
    </script>
  </body>
</html>
